昨天我們學了 git push
,知道怎麼把自己的 commit 傳上遠端。
但協作不是單向的,你的同事也會 push 新東西上去。
這時候,你要怎麼 更新本地的遠端資訊 呢?
今天的主角是 git fetch
,它就像情報員一樣,幫你低調拿到最新情報,但不會直接干擾你的工作。
git fetch
是什麼?fetch 的意思就是「抓取」。
在 Git 世界裡,git fetch
會去遠端倉庫下載最新的資料,但只更新 遠端追蹤分支(remote-tracking branches),例如 origin/main
。
它 不會動到你本地的分支,所以檔案內容也不會變。
換句話說:
git fetch
= 拿到最新消息,但不行動
這和後續要講的 git pull
不同,git pull
是 fetch + merge
,會直接把遠端更新合併到當前分支,有時可能導致衝突。
git fetch
?想像你在開發專案,但同事可能已經在遠端分支做了修改。
git pull
→ 可能會意外合併,產生衝突。git fetch
→ 先打聽遠端最新動態,再決定是否合併,本地安全又安心。工作流程建議:
1️⃣ 先 git fetch
查看遠端最新消息
2️⃣ 再決定合併策略(git merge
或 git rebase
)
# 從預設遠端(通常是 origin)抓取更新
git fetch
# 指定遠端
git fetch origin
# 指定分支
git fetch origin main
抓取後可以用以下方式查看更新的 commit :
git log main..origin/main
也可以用:
git log HEAD..origin/main --oneline
HEAD..origin/main
:比對本地 HEAD 與遠端 main 的差異-oneline
:簡化輸出,快速了解有哪些新提交這會顯示遠端有但你本地還沒有的 commit。
想先觀察,不想立刻合併
→ 適合在敏感專案中先確認變動。
多人協作,避免直接衝突
→ 先 fetch,再決定要不要 merge 或 rebase。
「我明明 fetch 了,為什麼檔案沒變?」
因為 fetch 只更新遠端追蹤分支,本地分支還沒同步。
要同步,需要手動 merge
或 rebase
,例如:
git merge origin/main
git fetch
,抓取遠端更新資料。git log HEAD..origin/main --oneline
查看遠端新提交。git merge origin/main
將更新合併到本地。git fetch
是低調型情報員:先打聽遠端最新消息,不改動本地分支。git log
與遠端分支比對,可以掌握團隊最新動態,為協作做好準備。git pull
的差別,就是 fetch 不會自動合併。明天我們將進入 Day 18:git pull
—— 把遠端改動同步到本地
學會 pull
後,你就能把團隊最新的進度快速拉到本地,完成協作流程的最後一步,不再錯過任何更新。